import { request } from '@/utils/service'

/**
 * 创建成绩记录
 * 接口描述: 录入新的成绩记录
 * 接口必填项:
 * studentId-学生ID
 * courseId-课程ID
 * score-成绩分数
 * @param {Object} data 成绩数据
 * @returns Promise
 */
export function createScoreApi(data) {
  return request({
    url: "scores",
    method: "post",
    data
  })
}

/**
 * 更新成绩记录
 * 接口描述: 更新成绩记录信息
 * 接口必填项:
 * id-成绩ID
 * studentId-学生ID
 * courseId-课程ID
 * score-成绩分数
 * @param {Object} data 成绩数据
 * @returns Promise
 */
export function updateScoreApi(data) {
  return request({
    url: `scores/${data.id}`,
    method: "put",
    data
  })
}

/**
 * 删除成绩记录
 * 接口描述: 根据ID删除成绩记录
 * 接口必填项:
 * id-成绩ID
 * @param {number} id 成绩ID
 * @returns Promise
 */
export function deleteScoreApi(id) {
  return request({
    url: `scores/${id}`,
    method: "delete"
  })
}

/**
 * 获取成绩详情
 * 接口描述: 根据ID获取成绩详细信息
 * 接口必填项:
 * id-成绩ID
 * @param {number} id 成绩ID
 * @returns Promise
 */
export function getScoreDetailApi(id) {
  return request({
    url: `score/${id}`,
    method: "get"
  })
}

/**
 * 获取所有成绩
 * 接口描述: 获取所有成绩记录列表
 * @returns Promise
 */
export function getAllScoresApi() {
  return request({
    url: "score",
    method: "get"
  })
}

/**
 * 分页查询成绩详情
 * 接口描述: 分页获取成绩详情，包含学生、课程、班级信息，支持搜索和过滤
 * 接口可选项:
 * page-页码(默认1)
 * pageSize-每页大小(默认10，最大100)
 * search-搜索关键词(按学号或姓名模糊查询)
 * classId-班级ID过滤
 * courseId-课程ID过滤
 * @param {Object} params 分页参数
 * @returns Promise
 */
export function getScorePageApi(params) {
  return request({
    url: "scores",
    method: "get",
    params
  })
}

/**
 * 根据学生ID查询成绩
 * 接口描述: 获取指定学生的所有成绩记录
 * 接口必填项:
 * studentId-学生ID
 * @param {number} studentId 学生ID
 * @returns Promise
 */
export function getScoresByStudentApi(studentId) {
  return request({
    url: `score/student/${studentId}`,
    method: "get"
  })
}

/**
 * 根据课程ID查询成绩
 * 接口描述: 获取指定课程的所有成绩记录
 * 接口必填项:
 * courseId-课程ID
 * @param {number} courseId 课程ID
 * @returns Promise
 */
export function getScoresByCourseApi(courseId) {
  return request({
    url: `score/course/${courseId}`,
    method: "get"
  })
}

/**
 * 根据班级ID查询成绩
 * 接口描述: 获取指定班级的所有成绩记录
 * 接口必填项:
 * classId-班级ID
 * @param {number} classId 班级ID
 * @returns Promise
 */
export function getScoresByClassApi(classId) {
  return request({
    url: `score/class/${classId}`,
    method: "get"
  })
}

/**
 * 根据班级ID和课程ID查询成绩
 * 接口描述: 获取指定班级和课程的所有成绩记录
 * 接口必填项:
 * classId-班级ID
 * courseId-课程ID
 * @param {number} classId 班级ID
 * @param {number} courseId 课程ID
 * @returns Promise
 */
export function getScoresByClassAndCourseApi(classId, courseId) {
  return request({
    url: `score/class/${classId}/course/${courseId}`,
    method: "get"
  })
}

/**
 * 计算学生平均分
 * 接口描述: 计算指定学生的平均分
 * 接口必填项:
 * studentId-学生ID
 * @param {number} studentId 学生ID
 * @returns Promise
 */
export function calculateStudentAverageApi(studentId) {
  return request({
    url: `scores/average/student/${studentId}`,
    method: "get"
  })
}

/**
 * 计算课程平均分
 * 接口描述: 计算指定课程的平均分
 * 接口必填项:
 * courseId-课程ID
 * @param {number} courseId 课程ID
 * @returns Promise
 */
export function calculateCourseAverageApi(courseId) {
  return request({
    url: `scores/average/course/${courseId}`,
    method: "get"
  })
}

/**
 * 计算班级平均分
 * 接口描述: 计算指定班级的平均分
 * 接口必填项:
 * classId-班级ID
 * @param {number} classId 班级ID
 * @returns Promise
 */
export function calculateClassAverageApi(classId) {
  return request({
    url: `scores/average/class/${classId}`,
    method: "get"
  })
}

/**
 * 批量导入成绩
 * 接口描述: 批量导入成绩记录
 * 接口必填项:
 * scores-成绩记录数组
 * @param {Array} scores 成绩记录数组
 * @returns Promise
 */
export function batchImportScoresApi(scores) {
  return request({
    url: "scores/batch",
    method: "post",
    data: scores
  })
}

/**
 * 综合查询成绩（支持多条件筛选）
 * 接口描述: 根据多个条件组合查询成绩记录，支持分页
 * 接口可选项:
 * page-页码(默认0)
 * size-每页大小(默认10)
 * studentId-学生ID
 * courseId-课程ID
 * classId-班级ID
 * studentName-学生姓名(模糊查询)
 * minScore-最低分数
 * maxScore-最高分数
 * startDate-开始日期
 * endDate-结束日期
 * @param {Object} params 查询参数
 * @returns Promise
 */
export function searchScoresApi(params) {
  return request({
    url: "score/search",
    method: "get",
    params
  })
}

/**
 * 获取成绩统计信息
 * 接口描述: 获取成绩的统计信息（总数、平均分、及格率等）
 * 接口可选项:
 * studentId-学生ID
 * courseId-课程ID
 * classId-班级ID
 * @param {Object} params 查询参数
 * @returns Promise
 */
export function getScoreStatisticsApi(params = {}) {
  return request({
    url: "score/statistics",
    method: "get",
    params
  })
}

/**
 * 获取学生选项列表
 * 接口描述: 获取学生选项列表，用于下拉选择
 * 权限: 仅管理员
 * @returns Promise
 */
export function getStudentOptionsApi() {
  return request({
    url: "scores/students/options",
    method: "get"
  })
}

/**
 * 获取课程选项列表
 * 接口描述: 获取课程选项列表，用于下拉选择
 * 权限: 学生/管理员
 * @returns Promise
 */
export function getCourseOptionsApi() {
  return request({
    url: "scores/courses/options",
    method: "get"
  })
}
